using UnityEngine;

/// <summary>
/// 金币收集器组件，负责处理玩家与金币的碰撞检测和收集逻辑
/// 应附加到玩家游戏对象上
/// </summary>
public class CoinCollector : MonoBehaviour
{
    // 存储当前收集的金币数量
    private int coinCount = 0;

    // 收集金币时是否播放音效（如果项目中有音效资源可启用）
    public bool playSoundOnCollect = true;

    // 用于显示金币数量的UI文本（如果项目中有UI可关联）
    public UnityEngine.UI.Text coinCountText;

    void Start()
    {
        Debug.Log("CoinCollector脚本初始化");

        // 尝试自动查找金币数量文本UI
        if (coinCountText == null)
        {
            GameObject coinTextObj = GameObject.Find("CoinCountText");
            if (coinTextObj != null)
            {
                coinCountText = coinTextObj.GetComponent<UnityEngine.UI.Text>();
                if (coinCountText != null)
                {
                    Debug.Log("成功自动找到CoinCountText UI元素");
                }
            }

            if (coinCountText == null)
            {
                Debug.LogWarning("未找到CoinCountText UI元素，将只在控制台显示金币数量");
            }
        }

        // 更新金币数量显示
        UpdateCoinCountDisplay();
    }

    /// <summary>
    /// 处理与金币的碰撞检测
    /// </summary>
    public void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Player")
        {
            Destroy(gameObject);
        }
    }

    /// <summary>
    /// 收集金币的逻辑
    /// </summary>
    /// <param name="coin">要收集的金币游戏对象</param>
    private void CollectCoin(GameObject coin)
    {
        if (coin == null)
        {
            Debug.LogError("尝试收集空金币对象！");
            return;
        }

        // 增加金币计数
        coinCount++;
        Debug.Log("已收集金币，当前总数：" + coinCount);

        // 更新金币数量显示
        UpdateCoinCountDisplay();

        // 这里可以添加收集音效播放代码
        if (playSoundOnCollect)
        {
            Debug.Log("播放金币收集音效");
            // 实际项目中可以添加音频播放代码
            // AudioSource.PlayClipAtPoint(coinCollectSound, transform.position);
        }

        // 尝试立即禁用金币以提供视觉反馈
        MeshRenderer renderer = coin.GetComponent<MeshRenderer>();
        if (renderer != null)
        {
            renderer.enabled = false;
            Debug.Log("金币渲染器已禁用");
        }

        // 禁用碰撞器，防止重复收集
        Collider collider = coin.GetComponent<Collider>();
        if (collider != null)
        {
            collider.enabled = false;
            Debug.Log("金币碰撞器已禁用");
        }

        // 销毁金币对象
        Debug.Log("准备销毁金币对象：" + coin.name);
        Destroy(coin);
        Debug.Log("金币对象销毁命令已发送");
    }

    /// <summary>
    /// 更新金币数量显示
    /// </summary>
    private void UpdateCoinCountDisplay()
    {
        if (coinCountText != null)
        {
            coinCountText.text = "金币: " + coinCount;
            Debug.Log("已更新金币UI显示");
        }
        else
        {
            // 如果没有UI元素，在控制台显示金币数量
            Debug.Log("当前金币数量: " + coinCount);
        }
    }

    /// <summary>
    /// 获取当前收集的金币数量
    /// </summary>
    /// <returns>当前金币数量</returns>
    public int GetCoinCount()
    {
        return coinCount;
    }
}